#ifndef CONFIGITEMWIDGET_H
#define CONFIGITEMWIDGET_H

#include <QWidget>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QRadioButton>
#include <QButtonGroup>
#include <QComboBox>
#include <QCheckBox>
#include <QMap>
#include <QList>

#include "CommonContainer.h"

class ConfigItemWidget : public CommonContainer
{
    Q_OBJECT

public:
    enum ConfigItemType {
        Label,          // 标签
        LineEdit,       // 输入框
    };

    struct ConfigItem {
        QString name;           // 配置项名称
        ConfigItemType type;    // 配置项类型
        QString value;          // 配置项值
        QStringList options;    // 选项列表（用于单选按钮组、下拉框等）
        int row;                // 行位置
        int column;             // 列位置
        int columnSpan;         // 列跨度（权重）
        QWidget *widget;        // 对应的控件
        QLabel *labelWidget;   // 对应的标签控件
    };

    struct MultiConfigItem {
        QString groupName;      // 组名称
        int row;                // 行位置
        int column;             // 列位置
        QLabel *groupLabel;     // 组标签
        QList<ConfigItem*> subItems; // 子配置项列表
    };

    explicit ConfigItemWidget(const QString &title, QWidget *parent = nullptr);
    ~ConfigItemWidget();

    void addStretch();
    void addRowStretch(int row, int column);

    // 公共接口
    void addConfigItem(const QString &name, ConfigItemType type, const QString &value = "", 
                      int row = -1, int column = -1, const QStringList &options = QStringList(), int columnSpan = 1);
    void addMultiConfigItem(const QString &groupName, const QStringList &subItemNames, 
                           const QStringList &subItemValues = QStringList(), int row = -1, int column = -1);
    
    // 数据操作
    QString getValue(const QString &name) const;
    void setValue(const QString &name, const QString &value);
    QMap<QString, QString> getAllValues() const;
    void setAllValues(const QMap<QString, QString> &values);
    
    // 编辑模式
    void setEditMode(bool enabled);
    bool isEditMode() const;

signals:
    void valueChanged(const QString &name, const QString &value);
    void editModeChanged(bool enabled);

private slots:
    void onValueChanged();

private:
    void setupUI();
    void setupConnections();
    ConfigItem* findConfigItem(const QString &name);
    QWidget* createWidget(ConfigItemType type, const QString &value = "", const QStringList &options = QStringList());
    void connectWidgetSignals(QWidget *widget, const QString &name);

    // 布局组件
    QGridLayout *m_gridLayout;
    
    // 配置项管理
    QList<ConfigItem*> m_configItems;
    QMap<QString, ConfigItem*> m_configItemMap;
    QMap<QString, QButtonGroup*> m_radioGroups;
    QList<MultiConfigItem*> m_multiConfigItems;
    QMap<QString, MultiConfigItem*> m_multiConfigItemMap;
    
    // 状态
    bool m_isEditMode;
    int m_nextRow;
    int m_nextColumn;
    int m_maxColumns;
};

#endif // CONFIGITEMWIDGET_H
